/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Pedidos.Pedido.Controlador;


import Pedidos.Cliente.BEAN.ClienteBEAN;
import Pedidos.Cliente.DAO.ClienteDAO;
import Pedidos.Pedido.BEAN.PedidoBEAN;
import Pedidos.Pedido.BEAN.Paquete;
import Pedidos.Pedido.DAO.PedidoDAO;
import Pedidos.Pedido.Vista.ClientePedido;
import Pedidos.Pedido.Vista.Pedido;
import Pedidos.Pedido.Vista.Pedido;
import Pedidos.Producto.BEAN.ProductoBEAN;
import Pedidos.Producto.DAO.ProductoDAO;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import sape.Controlador;
import sape.ControladorTabla;
import sape.MenuControlador;





/**
 *
 * @author Diego
 */
public class PedidoControlador extends ControladorTabla {
    
    Pedido vista;
    MenuControlador menu_controlador=null;
    String[] columnas_tabla = {"Nombre","Precio Unitario","Cantidad", "Precio Total"};
    Object[][] datos_tabla = null;
    ClienteBEAN cliente=null;
    public ArrayList<ProductoBEAN>listaProductos=null;
    public ArrayList<listaProducto>lista=null;

    public void eliminarLista(int row) {
        this.lista.remove(row);
        this.actualizar_tabla();
        this.actualizaTotal();
        JOptionPane.showMessageDialog(this.vista,"Pedido Eliminado de la Lista.");
    }

    public void aceptar() {
        //VALIDAR
        int x=Integer.valueOf(this.vista.tbLatitud.getText());
        int y=Integer.valueOf(this.vista.tbLongitud.getText());
        ArrayList <Paquete> lista_productosFinal=new ArrayList<Paquete>();
        for (int i=0;i<this.lista.size();i++){
            
            lista_productosFinal.add(new Paquete(this.lista.get(i).producto.getId(), this.lista.get(i).cantidad));
        }
        PedidoBEAN pedido=new PedidoBEAN(cliente.getId(),x , y, lista_productosFinal);
        PedidoDAO.agregarPedido(pedido);
         JOptionPane.showMessageDialog(this.vista,"Pedido Hecho.");
    }
    
    public class listaProducto{
        public listaProducto(ProductoBEAN p,int c){
            producto=p;
            cantidad=c;
        }
        public ProductoBEAN producto;
        public int cantidad;
    }
    public PedidoControlador(Pedido vista, MenuControlador menuControlador){
        this.menu_controlador=menuControlador;
        this.vista=vista;
        
    }
    public PedidoControlador(Pedido vista, MenuControlador menuControlador, int id){
        this.menu_controlador=menuControlador;
        this.vista=vista;
        this.cliente=ClienteDAO.getCliente(id);
        System.out.println(this.cliente.getId() +" B");
    }
    
     public void actualizar_tabla(){
            
            if((lista==null)||(lista.size()==0)){
                this.datos_tabla=null;
                fireTableDataChanged();
                return;
            }
            
            
            Object[][] new_datos_tabla=new Object[lista.size()][columnas_tabla.length];
            
            for(int i=0;i<lista.size();i++){
               listaProducto elemento=lista.get(i);
               new_datos_tabla[i][0]=elemento.producto.getNombre();
               new_datos_tabla[i][1]=elemento.producto.getPrecio();
               new_datos_tabla[i][2]=elemento.cantidad;
               new_datos_tabla[i][3]=elemento.cantidad*elemento.producto.getPrecio();
            }
            this.datos_tabla=new_datos_tabla;
            fireTableDataChanged();
        }
     
    public void disable(){
        this.vista.btnAgregarLista.setEnabled(false);
        this.vista.btnAceptar.setEnabled(false);
    }
    public void enable(){
        this.vista.btnAgregarLista.setEnabled(true);
        this.vista.btnAceptar.setEnabled(true);
        this.lista=new ArrayList<listaProducto>();
    }
    public void setListaProductos(){
         listaProductos=ProductoDAO.getListaProductos();
        ProductoBEAN[] aux=new ProductoBEAN[listaProductos.size()];
        for(int i=0;i<listaProductos.size();i++){
            aux[i]=listaProductos.get(i);
        }
        this.vista.cbProductosModel=new DefaultComboBoxModel(aux);
        

    }
    public void setCliente( ){
        this.vista.lbNombreCliente.setText(cliente.getNombre() + " " + cliente.getApellidoPaterno() + " " + cliente.getApellidoMaterno());
        this.vista.lbMailCliente.setText(cliente.getMail());
        this.vista.lbTelefonoCliente.setText(cliente.getTelefono());
    }

    public void buscarCliente() {
        this.menu_controlador.cerrarVista();
        this.vista.setVisible(false);
        ClientePedido new_vista=new ClientePedido(this.menu_controlador);
        this.menu_controlador.controlador_interno=new_vista.controlador;
        this.menu_controlador.abrirVista(new_vista);
    }

    public void actualizaTotal(){
        double total=0;
        for(int i=0;i<lista.size();i++){
            listaProducto elemento=lista.get(i);
            total+=elemento.cantidad*elemento.producto.getPrecio();
        }
        this.vista.lblTotal.setText(String.valueOf(total));
    }
    
    public void agregarLista() {
        ProductoBEAN producto=ProductoDAO.getProducto(this.listaProductos.get(this.vista.cmbProducto.getSelectedIndex()).getId());
        int cant=Integer.valueOf(this.vista.tbCantidad.getText());
        int i=0; 
        for(i=0;i<lista.size();i++){
            listaProducto elemento=lista.get(i);
            if(elemento.producto.getId()==producto.getId()){
                elemento.cantidad+=cant;
                lista.set(i, elemento);
                break;
            }
         }
        if(i==lista.size())lista.add(new listaProducto(producto, cant));
        this.actualizar_tabla();
        this.actualizaTotal();
        JOptionPane.showMessageDialog(this.menu_controlador.vista,"Pedido Agregado a la lista.");
    }
    
            @Override
        public int getColumnCount() {
            if(columnas_tabla==null)return 0;
            return columnas_tabla.length;
        }
       @Override
        public int getRowCount() {
           if(datos_tabla==null)return 0;
            
           return datos_tabla.length;
        }
       @Override
        public String getColumnName(int col) {
           
            return columnas_tabla[col];
        }
       @Override
        public Object getValueAt(int row, int col) {
            if(datos_tabla==null)return " ";
            
            return datos_tabla[row][col];
        }
       @Override
        public Class getColumnClass(int c) {
           if(datos_tabla==null)return " ".getClass();
            return getValueAt(0, c).getClass();
        }
       @Override
        public void setValueAt(Object value, int row, int col) {
           
            System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            datos_tabla[row][col] = value;
            fireTableCellUpdated(row, col);
            System.out.println("New value of data:");
            printDebugData();
            
        }      
        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + datos_tabla[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }        

}
